“晶体管”游戏分析 & 射击Demo展示

最近一周,因为我们的项目“极”的几个开发人员都要忙于考试,我也乐得清闲,打了不少游戏。

主要是玩了一下“刺客信条-枭雄”和“晶体管”,其中“晶体管”我现在是二周目通关了,对这个游戏十分喜爱,接下来我就简单分析一下晶体管这个游戏吧。

1. 晶体管的分析

晶体管

晶体管是一款赛博朋克风格的、动作类的角色扮演游戏。这款游戏是线性流程的,分为许多个小关卡,玩家只能以按照次序通过各个关卡。

1.1 战斗系统 – 时间

你操控的主人公Red有一个特殊能力:时间暂停。当你开启这个能力的时候,时间会突然暂停,在此期间,你可以移动、攻击。当你结束时间暂停的时候,玩家会以极快的速度执行你在时间暂停期间的所做的所有动作。

当然,这个时间暂停也是有代价的 – 之后的2-3秒时间内你的技能会处于冷却状态。不过一般来说,你在时间暂停期间就已经消灭大部分敌人、或者说已经逃离到安全位置了,这个时候,技能冷却又有什么关系呢?

我认为时间暂停这个设定是战斗系统的核心,因为它极大的增加了玩家的可选择性。比如,利用时间暂停,你可以埋下一个炸弹,然后将附近的敌人拉扯过来,然后再引爆炸弹,从而快速消灭大量敌人。比如,在你血量不多的时候,你可以利用时间暂停,先快速闪现到敌人面前,做出一次强力攻击,然后再闪现出敌人的攻击范围。

由于这个游戏中有十几种技能,同时不同的技能组合可以产生新技能,所以在不同的玩家手中,有不同的一套时间暂停期间的攻击策略。如果你厌倦了这种攻击方式,你也可以换另一种攻击方式。让这个快节奏的动作游戏有了极强的策略性。

1.2 战斗系统 – 技能组合

在晶体管中,你根据等级的提升,会陆续得到16个技能,而最棒的是,你可以将不同技能组合起来,得到一个新的技能。

比如魅惑技能:魅惑技能,你可以将这个技能作为和“分裂”技能组合,从而可以一次性发出三个魅惑技能;你还可以将它和“闪现”技能组合,从而可以在闪现期间魅惑周围的敌人;你还可以将它和“召唤”技能组合,从而使你的召唤物能够魅惑敌人…….

总之,这十六个技能,任意三个技能都可以进行组合,从而得到一个新的技能。这样,也减少了玩家的学习成本。试想,如果直接给玩家20-30个技能,玩家很快就会被弄的晕晕乎乎的,但是如果让玩家用少量的技能进行技能组合,玩家就会很容易明白新技能的效果是什么:就是那几个技能的效果叠加嘛(大致是如此)。

1.3 叙事方式 – 旁白

在晶体管的游戏剧情中,主角原来是一个歌女,但之后遭人陷害,以至于失去了发声的能力,而他的男友为了保护她而死,不过灵魂被保存在主角的战斗武器 – 晶体管中。

所以在游戏推进的过程中,始终会有一个男声的旁白和你说话。想想在游戏设定中男声是女主人公的男友,所以其说的话大多是一些关心、调侃、恋人之间的情话。其声音也很好听,不禁让人有许多好感,战斗也不再单调了。

1.4 其他 – 美术、音乐

晶体管的美术是赛博朋克的风格,其场景的灯光做得很棒,很有科幻感。音乐也十分好听。

其获得了 IGN 2014 最佳美术奖IGN 2014大奖中音乐相关奖项的提名

2. 射击Demo展示

因为对晶体管中时间控制的机制很感兴趣,所以我做了有这个机制的一个类似的射击Demo。同时我也做了一下灯光效果和运动模糊,算是学习了一下Unity Shader吧。

2.1 时间控制系统

先来看看时间控制的效果展示:

时间控制效果展示

在这个Demo中,当玩家按下空格键的时候,时间会暂停,玩家可以在这期间进行一系列操作,这些操作也可以回退。当你再次按下这个操作的时候,你会以极快的速度执行你刚刚所做的操作。

我是这么实现的:

  • 将每个Action抽象成一系列数据。
    • 比如射击Action:
      射击动作相关的数据
    • 比如移动Action:
      移动动作数据
  • 将Action用双向链表连接。当添加一个Action时,在链表尾加入这个Action的数据;当要回退一个Action时,在链表尾删除这个数据;当要执行整套Action时,从链表头开始顺序执行所有Action。最后销毁链表。
    动作
    上图是我 Inspector 面板中的示意图。从示意图中可以看到,Player 先执行了一个移动动作、再射击、再移动、最后转换状态动作。

  • 每个Action都继承自基类BaseAction,拥有一个读入的方法,一个执行的方法,一个回退的方法。这里是借鉴了游戏编程模式中的命令模式。

2.2 闪光效果

先看看这个闪光的效果展示:

闪光效果展示

这个闪光效果是这样实现的:

  1. 专用相机拍下所有子弹的闪光图,保存到RenderTexture中:
    子弹闪光图
  2. 对闪光图进行高斯模糊,让其边缘变得平滑:
    模糊之后的闪光图
  3. 根据闪光图的亮度(luminance = 0.2125 r + 0.7154 g + 0.0721 * b),混合子弹图和背景图,得出最终效果:
    最终效果